package com.wn.date20190820;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 获取局域网所有ip
 * 
 * @author song
 *
 */
public class GetLanIP
{
	static List<String> list=new ArrayList<String>();
	static Map<String, String> map=new HashMap<String, String>();
//	public static void main(String[] args) throws Exception
//	{
////		getIPs();
////		list.forEach(System.out::println);
//		
//		list=Arrays.asList("192.168.2.111","192.168.2.112","192.168.2.113","192.168.2.115","192.168.2.117",
//"192.168.2.118");
//		
//		System.out.println("\n\n\n\n");
//		//list.add("192.168.2.122");
//		getHostName();
//		map.forEach((k,v)->System.out.println(k+"="+v));;
//	}

	
	/**
	 * 获取所有ip地址， 通过arp -a命令
	 * @throws Exception 
	 */
	public static List<String> getIPs() throws Exception
	{
		// 命令
		BufferedReader reader = extracted("arp -a");
		String s = null;
		while ((s = reader.readLine()) != null)
		{
			// 包括ip地址后面包含，动态，静态
			if(s.indexOf("动态")>-1||s.indexOf("静态")>-1)
			{
				// 四个空格分隔符
				 String[] str=s.split(" {4}");
                 list.add(str[0].trim());
                 
			}
		}
		return list;
	}

	/**
	 * 执行命令
	 * @return
	 */
	public static BufferedReader extracted( String cmd)
	{
		String command = cmd;
		Runtime r = Runtime.getRuntime();
		Process p = null;
		
		try
		{
			p = r.exec(command);
		} catch (IOException e)
		{
			e.printStackTrace();
		}
		// 需要设置编码
		BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream(), Charset.forName("GBK")));
		return reader;
	}
	
	/**
	 * 通过ip地址，获取主机名字
	 * nbtstat -a ip地址获取
	 *            NetBIOS 远程计算机名称表

       名称               类型         状态
    ---------------------------------------------
    USER-20190305CL<00>  唯一          已注册
    WORKGROUP      <00>  组           已注册
    USER-20190305CL<20>  唯一          已注册
    WORKGROUP      <1E>  组           已注册

    MAC 地址 = 00-22-68-1E-7A-C2
	 * @throws Exception 
	 */
	public static void getHostName(Map<String, String> mp, List<String> ips) throws Exception
	{
		for(String s:ips)
		{
			BufferedReader reader = extracted("nbtstat -a "+s);
			String line=null;
			
			while( (line=reader.readLine())!=null)
			{
				// 主机名行，包括 '唯一'
				if(line.indexOf("唯一")>-1)
				{
					//主机名 <00>
					String str=line.split("<")[0].trim();
					// 添加map
					mp.put(str,s);
					System.out.println(str+"="+s);
					break;
				}
			}
		}
	}
	/**
	 * 单挑查找ip name
	 * @param ip
	 * @return
	 */
	public static String getNameByIp(String ip)
	{
		BufferedReader reader = extracted("nbtstat -a "+ip);
		String line=null;
		try
		{
			while( (line=reader.readLine())!=null)
			{
				// 主机名行，包括 '唯一'
				if(line.indexOf("唯一")>-1)
				{
					//主机名 <00>
					String str=line.split("<")[0].trim();
					System.out.println(str+"="+ip);
					return str;
				}
			}
		} catch (IOException e)
		{
			e.printStackTrace();
		}
		return ip;
	}
	/**
	 * 获取本机ip,获取失败返回null；
	 * @return
	 */
	public static String getLocalIP()
	{
		BufferedReader reader = extracted("ipconfig");
		String line=null;
		try
		{
			while( (line=reader.readLine())!=null)
			{
				// ipv4
				if(line.indexOf("IPv4")>-1)
				{
					// 
					String str=line.split(":")[1].trim();
					System.out.println("本地ip："+str);
					return str;
				}
			}
		} catch (IOException e)
		{
			e.printStackTrace();
		}
		return null;
	}
	
}
